#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
#       pyafn.py
#       
#       Copyright 2011 Cleve <mauricio.cleveland@gmail.com>
#       
#       This program is free software; you can redistribute it and/or modify
#       it under the terms of the GNU General Public License as published by
#       the Free Software Foundation; either version 2 of the License, or
#       (at your option) any later version.
#       
#       This program is distributed in the hope that it will be useful,
#       but WITHOUT ANY WARRANTY; without even the implied warranty of
#       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#       GNU General Public License for more details.
#       
#       You should have received a copy of the GNU General Public License
#       along with this program; if not, write to the Free Software
#       Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
#       MA 02110-1301, USA.
#       
#       

import carga_archivo
from estrella import Estrella
from operator import itemgetter, attrgetter
from progressbar import Percentage, ProgressBar, Bar, ETA

import time
import sys

MejoresDistancias = []

def main():
  
  #Verifico entrada.
  if len(sys.argv[1])>0:
    archivo = str(sys.argv[1])
    if archivo.isdigit():
      print _('Error, for help type man pyafn.')
      sys.exit()
      
  #Iteraciones.
  if sys.argv[2].startswith('-'):
    iteraciones = int(sys.argv[2][1:])
    
  #Probabilidad de fusion.
  if sys.argv[3].startswith('-'):
    probabilidad_fusion = float(sys.argv[3][1:])
    
  #Cuento nodos, genero matriz de distancia y almaceno coordenadas.
  print 'PyAfn 0.6'
  
  nodos, matriz_distancia, coordenadas, nodos_coord = carga_archivo.Carga_archivo(archivo)
  
  #Barra de progreso.
  widgets = ['Fusión nuclear: ', Percentage(), ' ', Bar(), ' ', ETA(), ' ']
  pbar = ProgressBar(widgets=widgets, maxval=iteraciones).start()
  #Fin barra de progreso.
  
  for i in xrange(iteraciones):
    #Crear estrella.
    estrella = Estrella(nodos, matriz_distancia, coordenadas, nodos_coord, probabilidad_fusion)
    DistanciaEnlaces = estrella.Confinamiento()
    MejoresDistancias.append(DistanciaEnlaces)
    pbar.update(i+1)
    
  pbar.finish()
  print '\nBest distance: ',sorted(MejoresDistancias)[0]
          
  return 0

if __name__ == '__main__':
  main()

